System and method for transport-layer level identification and isolation of container traffic

ABSTRACT

Disclosed is a system and method of providing transport-level identification and isolation of container traffic. The method includes receiving, at a component in a network, a packet having a data field, extracting, at a network layer, container identification data from the data field and applying a policy to the packet at the component based on the container identification data. The data field can include one of a header, an IPv6 extension header, a service function chaining container identification, a network service header, and an optional field of an IPv4 packet.

TECHNICAL FIELD

The present disclosure relates to a container identification scheme on the network layer that can be used to enable policy enforcement on a per-container basis.

BACKGROUND

Containers define a different way to host workloads within cloud environments. While there are container orchestration packages, such as DOCKER, DOCKERSWARM, CLOUDIFY, etc., that identify container-based workloads, the orchestration is something that is locally-significant to the orchestration layer and not something that is transported over the network.

Assume the following example container based deployment: Two different HTTP based applications are deployed across a cluster of containers distributed across multiple compute nodes. Each application is running separate from the other (different containers), but can share the same compute node. At the moment, without being able to uniquely identify containers on the same compute node running the same application but offering a different service, there is no way to apply policies or other network functions. IPs, TCP/UDP ports or other HTTP specific distinguishers are not sufficient to separate containers on the same compute node (or across compute nodes) and identify them on the network.

BRIEF DESCRIPTION OF THE DRAWINGS

The disclosure will be readily understood by the following detailed description in conjunction with the accompanying drawings in which:

FIG. 1 illustrates the basic computing components of a computing device according to an aspect of this disclosure.

FIG. 2 illustrates the general context in which the present disclosure applies.

FIG. 3 illustrates another aspect of a network in which the present disclosure applies.

FIG. 4 illustrates an example method.

DESCRIPTION OF EXAMPLE EMBODIMENTS Overview

The present disclosure addresses the issues raised above with respect to the localization of the orchestration processes to the orchestration layer. Disclosed herein is a new process which enables the ability to identify and isolate container-based workloads on the network, which can open up many powerful use-cases where the system can apply network techniques to the traffic (QoS/prioritization, accounting/billing, container based policy enforcement, cloud-based classification, etc.). This disclosure provides concepts that seek to solve the lack of identification and isolation of container originated/destined flows at the transport layer.

Disclosed is a system and method of providing transport-level identification and isolation of container traffic. The method includes receiving, at a component in a network, a packet having a data field, extracting, at a network layer, container identification data from the data field and applying a policy to the packet at the component based on the container identification data. The data field can include one or more of a header, an IP (e.g., IPv4 or IPv6) extension header, a service function chaining container identification, a network service header, and an option field of an IP packet.

Applying the policy to the packet can include applying the policy on a per-container basis or a per-container-flow basis. The policy can be associated with at least one of QoS, prioritization, accounting, billing, cloud-based classification, a container-based policy, and/or a workload-based policy. Further, applying a policy to the packet at the component can be based on the container identification and can further include applying the policy to workload associated with the packet.

Description

The present disclosure addresses the above-identified issues and provides a solution to manage packet flows when distributing workload across many containers. Such a distribution of workload across containers is a highly demanded way to deploy applications. Compared to virtual machines, containers are lightweight, quick and easy to spawn and destroy. With the increasing interest in container-based deployments, the network has to adapt to container-specific traffic patterns. Container technology, such as DOCKER and LINUX CONTAINERS (LXC), is intended to run a single application and does not represent a full-machine virtualization. A container can provide an entire runtime environment: an application, plus all its dependencies, libraries and other binaries, and configuration files needed to run it, bundled into one package. By containerizing the application platform and its dependencies, differences in operating system distributions and underlying infrastructure are abstracted away.

With virtualization technology, the package that can be passed around is a virtual machine and it includes an entire operating system as well as the application. A physical server running three virtual machines would have a hypervisor and three separate operating systems running on top of it. By contrast, a server running three containerized applications as with DOCKER runs a single operating system, and each container shares the operating system kernel with the other containers. Shared parts of the operating system are read only, while each container has its own mount (i.e., a way to access the container) for writing. That means the containers are much more lightweight and use far fewer resources than virtual machines.

Other containers exist as well such as the LXC that provide an operating-system-level virtualization method for running multiple isolated Linux systems (containers) on a control host using a single Linux kernel. These containers are considered as something between a chroot (an operation that changes the apparent root directory for a current running process) and a full-fledged virtual machine. They seek to create an environment that is as close as possible to a Linux installation without the need for a separate kernel.

The present disclosure can apply to any definition of a “container.” This disclosure focuses on containers and how to provide improvements to managing the processing of applications within containers.

The present disclosure introduces a classification/identification/isolation approach specific to containers to fill a gap that these deployments currently face. The introduced identification mechanism allows the unique (depending on the scope everything from a cluster to a whole cloud providers network) identification of containers and their traffic within the network elements.

The disclosure first turns to FIG. 1 which discloses some basic hardware components that can apply to system examples of the present disclosure. Following the discussion of the basic example hardware components, the disclosure will turn to the identification and isolation of container traffic. With reference to FIG. 1, an exemplary system and/or computing device 100 includes a processing unit (CPU or processor) 110 and a system bus 105 that couples various system components including the system memory 115 such as read only memory (ROM) 120 and random access memory (RAM) 125 to the processor 110. The system 100 can include a cache 112 of high-speed memory connected directly with, in close proximity to, or integrated as part of the processor 110. The system 100 copies data from the memory 115, 120, and/or 125 and/or the storage device 130 to the cache 112 for quick access by the processor 110. In this way, the cache provides a performance boost that avoids processor 110 delays while waiting for data. These and other modules can control or be configured to control the processor 110 to perform various operations or actions. Other system memory 115 may be available for use as well. The memory 115 can include multiple different types of memory with different performance characteristics. It can be appreciated that the disclosure may operate on a computing device 100 with more than one processor 110 or on a group or cluster of computing devices networked together to provide greater processing capability. The processor 110 can include any general purpose processor and a hardware module or software module, such as module 1 132, module 2 134, and module 3 136 stored in storage device 130, configured to control the processor 110 as well as a special-purpose processor where software instructions are incorporated into the processor. The processor 110 may be a self-contained computing system, containing multiple cores or processors, a bus, memory controller, cache, etc. A multi-core processor may be symmetric or asymmetric. The processor 110 can include multiple processors, such as a system having multiple, physically separate processors in different sockets, or a system having multiple processor cores on a single physical chip. Similarly, the processor 110 can include multiple distributed processors located in multiple separate computing devices, but working together such as via a communications network. Multiple processors or processor cores can share resources such as memory 115 or the cache 112, or can operate using independent resources. The processor 110 can include one or more of a state machine, an application specific integrated circuit (ASIC), or a programmable gate array (PGA) including a field PGA.

The system bus 105 may be any of several types of bus structures including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of bus architectures. A basic input/output system (BIOS) stored in ROM 120 or the like, may provide the basic routine that helps to transfer information between elements within the computing device 100, such as during start-up. The computing device 100 further includes storage devices 130 or computer-readable storage media such as a hard disk drive, a magnetic disk drive, an optical disk drive, tape drive, solid-state drive, RAM drive, removable storage devices, a redundant array of inexpensive disks (RAID), hybrid storage device, or the like. The storage device 130 is connected to the system bus 105 by a drive interface. The drives and the associated computer-readable storage devices provide nonvolatile storage of computer-readable instructions, data structures, program modules and other data for the computing device 100. In one aspect, a hardware module that performs a particular function includes the software component stored in a tangible computer-readable storage device in connection with the necessary hardware components, such as the processor 110, bus 105, an output device such as a display 135, and so forth, to carry out a particular function. In another aspect, the system can use a processor and computer-readable storage device to store instructions which, when executed by the processor, cause the processor to perform operations, a method or other specific actions. The basic components and appropriate variations can be modified depending on the type of device, such as whether the computing device 100 is a small, handheld computing device, a desktop computer, or a computer server. When the processor 110 executes instructions to perform “operations”, the processor 110 can perform the operations directly and/or facilitate, direct, or cooperate with another device or component to perform the operations.

Although the exemplary embodiment(s) described herein employs a storage device such as a hard disk 130, other types of computer-readable storage devices which can store data that are accessible by a computer, such as magnetic cassettes, flash memory cards, digital versatile disks (DVDs), cartridges, random access memories (RAMS) 125, read only memory (ROM) 120, a cable containing a bit stream and the like, may also be used in the exemplary operating environment. According to this disclosure, tangible computer-readable storage media, computer-readable storage devices, computer-readable storage media, and computer-readable memory devices, expressly exclude media such as transitory waves, energy, carrier signals, electromagnetic waves, and signals per se.

To enable user interaction with the computing device 100, an input device 145 represents any number of input mechanisms, such as a microphone for speech, a touch-sensitive screen for gesture or graphical input, keyboard, mouse, motion input, speech and so forth. An output device 135 can also be one or more of a number of output mechanisms known to those of skill in the art. In some instances, multimodal systems enable a user to provide multiple types of input to communicate with the computing device 100. The communications interface 140 generally governs and manages the user input and system output. There is no restriction on operating on any particular hardware arrangement and therefore the basic hardware depicted may easily be substituted for improved hardware or firmware arrangements as they are developed.

For clarity of explanation, the illustrative system embodiment is presented as including individual functional blocks including functional blocks labeled as a “processor” or processor 110. The functions these blocks represent may be provided through the use of either shared or dedicated hardware, including, but not limited to, hardware capable of executing software and hardware, such as a processor 110, that is purpose-built to operate as an equivalent to software executing on a general purpose processor. For example the functions of one or more processors presented in FIG. 1 can be provided by a single shared processor or multiple processors. (Use of the term “processor” should not be construed to refer exclusively to hardware capable of executing software.) Illustrative embodiments may include microprocessor and/or digital signal processor (DSP) hardware, read-only memory (ROM) 120 for storing software performing the operations described below, and random access memory (RAM) 125 for storing results. Very large scale integration (VLSI) hardware embodiments, as well as custom VLSI circuitry in combination with a general purpose DSP circuit, may also be provided.

The logical operations of the various embodiments are implemented as: (1) a sequence of computer implemented steps, operations, or procedures running on a programmable circuit within a general use computer, (2) a sequence of computer implemented steps, operations, or procedures running on a specific-use programmable circuit; and/or (3) interconnected machine modules or program engines within the programmable circuits. The system 100 shown in FIG. 1 can practice all or part of the recited methods and steps, can be a part of the recited systems, and/or can operate according to instructions in the recited tangible computer-readable storage devices. Such logical operations can be implemented as modules configured to control the processor 110 to perform particular functions according to the programming of the module. For example, FIG. 1 illustrates three modules Mod1 132, Mod2 134 and Mod3 136 which are modules configured to control the processor 110. These modules may be stored on the storage device 130 and loaded into RAM 125 or memory 115 at runtime or may be stored in other computer-readable memory locations.

One or more parts of the example computing device 100, up to and including the entire computing device 100, can be virtualized. For example, a virtual processor can be a software object that executes according to a particular instruction set, even when a physical processor of the same type as the virtual processor is unavailable. A virtualization layer or a virtual “host” can enable virtualized components of one or more different computing devices or device types by translating virtualized operations to actual operations. Ultimately however, virtualized hardware of every type is implemented or executed by some underlying physical hardware. Thus, a virtualization compute layer can operate on top of a physical compute layer. The virtualization compute layer can include one or more of a virtual machine, an overlay network, a hypervisor, virtual switching, and any other virtualization application.

The processor 110 can include all types of processors disclosed herein, including a virtual processor. However, when referring to a virtual processor, the processor 110 includes the software components associated with executing the virtual processor in a virtualization layer and underlying hardware necessary to execute the virtualization layer. The system 100 can include a physical or virtual processor 110 that receive instructions stored in a computer-readable storage device, which cause the processor 110 to perform certain operations. When referring to a virtual processor 110, the system also includes the underlying physical hardware executing the virtual processor 110.

The disclosure now turns to FIGS. 2 and 3 which illustrate an example environment in which the concepts disclosed herein can apply. FIG. 2 shows an environment 200 having multiple connected containers 202, 204, 206, 210, 212, 214 connected. The environment 200 can include one or more networks (e.g., private or public networks), datacenters, systems (e.g., servers, switches, etc.), etc. Moreover, the containers 202, 204, 206, 210, 212, 214 can be hosted on one or more systems. For examples, the containers 202, 204, 206, 210, 212, 214 can be hosted on separate servers or switches. In other cases, some of the containers 202, 204, 206, 210, 212, 214 can be hosted on a same system.

A packet 208 is shown that is to be routed to one of the containers. Examples 216 of different data fields show that as part of a packet, an IPv6 header, an IPv6 extension header, a remote procedure call (RPC) container identification, and/or a DST container ID, can be used to store data that can be used to carry out the operations disclosed herein. The following disclosure outlines several possible, nonlimiting examples. First, the system can use IPv6 extension header. The container classifier/identifier could be transmitted in one of the available optional extension headers. This approach allows for a very customizable definition of a container-specific IPv6 extension header. Another possible implementation could be the use of Network Service Header (NSH) from Service Function Chaining (SFC) within a cloud environment and the incorporation of the Container ID into the metadata field (type 1 or type 2) of the NSH headers. For a legacy network, support for the Container ID could also be incorporated into the option field of an IPv4 packet.

By introducing a classification mechanism for containers on the network, policies can be applied on a per-container basis. The classification/identification for containers can be a way to extend the existing classification approaches necessary for cloud environments. It could for example be used in conjunction with the Universal Cloud Classifier UCC (attorney docket No. CPOL 998155, incorporated herein by reference) to provide fine-grained isolation of workload on top of containers while having the visibility of cloud entities on the network layer (e.g., Layer 3 of OSI model or some other layer of the network).

Based on the example outlined in the problem area, the disclosure provides a brief overview of how this can be solved by the proposed container identifier. FIG. 3 depicts a typical containerized cluster deployment 300 of different HTTP based applications 302, 304, 306 spanning multiple compute nodes 308, 310. HTTP applications are used herein as non-limiting examples for explanation purposes. The approaches set forth herein can be implemented with any other types of applications.

HTTP Application 1 (306) spans across two compute nodes 308, 310 with three containers 320 (similar to HTTP Application 2 (304), which runs on three containers 322 spanning two nodes 308, 310). HTTP Application 3 (302) on the other hand, only runs within one container 324 hosted on compute node 310.

Being able to apply policies on the virtual switch 312, 314 based on the flow to each of the containers 320, 322, 324, and the respective HTTP Applications 302, 304, 306 is difficult to achieve as there is no distinct identifier on the network layer for the container itself. The container relies on the host for external connectivity while the application is hosted on the same port. By introducing the container identifier on the network layer, policies can be enforced within the compute node on the virtual switch 316, 318, across physical devices interconnecting compute nodes, shown in FIG. 3 as switches 312, 314 or via other network functions (such as firewalls, Quality of Service, etc.)

The advantages of using a container identifier on the network layer include that the process enriches the way containers are used today in deploying applications and running distributed workloads. The container identifier enables the enforcement of policies on a per container basis for either container specific or container cluster deployed workloads. The container identification can be a software container on the network. The process also enables the classification and isolation of containers and their assets (such as traffic flow) on the network layer and enables policy enforcement on a per-container and per-container-flow basis.

FIG. 4 illustrates a method example. The method includes receiving, at a component in a network such as a node 308, a packet (e.g., packet 208) having a data field (402). The data field can include container identification data and other information such as illustrated by the examples 216. In some examples, the data field can include a header, an IPv6 extension header, a service function chaining container identification, a network service header, an option field of an IPv4 packet, and so forth.

The method can also include extracting, at a network layer (e.g., layer 3 of the OSI model), container identification data from the data field (404). The container identification data can include, for example, a container identifier (e.g., unique container ID), a container name, a container address (e.g., container IP address, container VLAN, etc.), container host (e.g., hostname, host address, etc.), a container type, etc. In one aspect the container identifier might be inferred from other data that is received such as historical traffic patterns plus knowledge of a container type.

The method can further include applying a policy to the packet at the component (e.g., node 308, vSwitch 316, or switch 312) based on the container identification data (406).

Applying the policy to the packet can include applying the policy on a per-container basis or a per-container-flow basis. The policy can be associated with a QoS (quality of service), prioritization, accounting, billing, cloud-based classification, a container-based policy, and/or a workload-based policy. Moreover, the policy can include one or more rules or requirements, such as firewall rules, performance rules (e.g., throughput, latency, etc.), routing rules, classification rules, application rules, service rules, etc.

Further, applying a policy to the packet at the component can be based on the container identification further comprises applying the policy to workload associated with the packet.

The system can also be configured to distinguish between an application running on a container (i.e. what is disclosed above) and, in addition, the application's micro-services and the associated containers. For example, a bigger application can now be separated out into smaller chunks called micro-services each in a respective container. In some cases, it might be valuable to be more granular when applying policies to traffic from the application (and its micro-services). A new structure of organizing the interrelated nature of containers can be used. This new structure can take on a number of different forms. For example, a hierarchical approach could be applied with the application container ID as a root ID and micro-services container IDs as sub-IDs. Micro-services can also have further micro-services adding another layer to the hierarchy.

Policies can be applied in such a way as to automatically flow to sub IDs (and further sub IDs) if they are applied to root ID. Further, a granular approach can involve a portion of a policy applying to a sub ID depending on a number of different factors such as current performance (of one or more of the application in the container, and micro-services in different containers), predicted performance, resource availability, SLAs, type of micro-service, etc. Thus, one policy can be configured such that its application in a hierarchical ID structure is either a whole policy or a portion of the policy according to a relationship between containers associated with root IDs and sub IDs (and further sub IDs). A separate policy could apply as well.

In some cases, a container sub ID may have a higher priority than a root ID in that the particular service to the overall success of the application is of high value. The policy and/or portions of the policy could apply based on a priority or status of each respective ID. Thus, where there is an interrelationship amongst containers with different IDs (hierarchical, horizontal, or otherwise), the status of a respective ID could govern how much of a policy to apply. Different policies could apply to different types of IDs as well. Thus, an ID can be rated (say on 1-10 scale) or graded (high value, medium value, low value) or based on a type (data centric, processor centric, bandwidth centric, strict SLA requirements, etc.). In other words, a type of ID can relate to what kinds of services the application or micro-service provides. Which policy or portion of a policy to apply can be based at least in part on any one of these factors. For example, each ID can have a type assigned and a value. One micro-service might be a data centric service having a high value.

In another aspect, IDs can be organized more horizontally where an application having a container ID has a corresponding micro-service ID, but they are considered more as sister IDs rather than a root ID and a sub ID. This is a less hierarchical approach. The IDs in this example can be considered more as equivalent IDs, which can be based on any number of parameters or factors. In this regard, one example could be that the policy is automatically applied equally across all equal-level IDs and/or perhaps in portions to sub IDs. Each ID in a horizontal structure could also have parameters associated with it such as a type, a value, a rating, and so forth. These parameters can cause different policies or different portions of policies to apply. Of course the organization of container IDs can be a mixture of vertical and horizontal approaches with a variety of factors governing how policies flow from or are interrelated between the various IDs.

The present examples are to be considered as illustrative and not restrictive, and the examples is not to be limited to the details given herein, but may be modified within the scope of the appended claims.

Claim language reciting “at least one of” a set indicates that one member of the set or multiple members of the set satisfy the claim. For example, claim language reciting “at least one of A and B” can include A only, B only, or A and B. 

What is claimed is:
 1. A method comprising: receiving, at a component in a network, a packet having a data field; extracting, at a network layer, container identification data from the data field, the container identification data identifying a software container on the network; and applying a policy to the packet at the component based on the container identification data.
 2. The method of claim 1, wherein the data field comprises one of a header, an IPv6 extension header, a service function chaining container identification, a network service header, and an option field of an IPv4 packet.
 3. The method of claim 1, wherein applying the policy to the packet comprises applying the policy on a per-container basis or a per-container-flow basis.
 4. The method of claim 1, wherein the policy is associated with at least one of QoS, prioritization, accounting, billing, cloud-based classification, a container-based policy, and a workload-based policy.
 5. The method of claim 1, wherein applying a policy to the packet at the component based on the container identification data further comprises applying the policy to a workload associated with the packet.
 6. The method of claim 1, wherein the component comprises a virtual switch.
 7. A system comprising: one or more processors; and a computer-readable medium, storing instructions which, when executed by the one or more processors, cause the one or more processors to perform operations comprising: receiving, at a component in a network, a packet having a data field; extracting, at a network layer, container identification data from the data field; and applying a policy to the packet at the component based on the container identification data.
 8. The system of claim 7, wherein the data field comprises one of a header, an IPv6 extension header, a service function chaining container identification, a network service header, and an option field of an IPv4 packet.
 9. The system of claim 7, wherein applying the policy to the packet comprises applying the policy on a per-container basis or a per-container-flow basis.
 10. The system of claim 7, wherein the policy is associated with at least one of QoS, prioritization, accounting, billing, cloud-based classification, a container-based policy, a workload-based policy.
 11. The system of claim 7, wherein applying a policy to the packet at the component based on the container identification data further comprises applying the policy to workload associated with the packet.
 12. The system of claim 7, wherein the component comprises a virtual switch.
 13. A computer-readable storage device storing instructions which, when executed by a processor, cause the processor to perform operations comprising: receiving, at a component in a network, a packet having a data field; extracting, at a network layer, container identification data from the data field; and applying a policy to the packet at the component based on the container identification data.
 14. The computer-readable storage device of claim 13, wherein the data field comprises one of a header, an IPv6 extension header, a service function chaining container identification, a network service header, and an option field of an IPv4 packet.
 15. The computer-readable storage device of claim 13, wherein applying the policy to the packet comprises applying the policy on a per-container basis or a per-container-flow basis.
 16. The computer-readable storage device of claim 13, wherein the policy is associated with at least one of QoS, prioritization, accounting, billing, cloud-based classification, a container-based policy, a workload-based policy.
 17. The computer-readable storage device of claim 13, wherein applying a policy to the packet at the component based on the container identification data further comprises applying the policy to workload associated with the packet.
 18. The computer-readable storage device of claim 13 wherein the component comprises a virtual switch. 